package com.jgz;

/**
 * ================================================
 * 作者:Je(揭光智)     联系方式:QQ:364049613
 * 版本:
 * 创建日期:2018/7/31
 * 描述:
 * 修订历史：
 * ================================================
 */
interface IBag<T> {

    /**
     * 向包中添加一个元素,如果包还未满则把元素添加到包中,否则添加失败
     *
     * @param elem 准备添加到包中的元素
     * @return 是否添加成功, true表示添加成功, false表示添加失败
     */
    boolean add(T elem);

    /**
     * 把包中的元素转成一个数组
     *
     * @return 包中元素生成的数组
     */
    Object[] toArray();

    /**
     * 是否为空包
     *
     * @return true表示为空包, false表示添加不为空包
     */
    boolean isEmpty();

    /**
     * 判断是否已经满了
     *
     * @return 包是否已满
     */
    boolean isArrayFull();

    /**
     * 获取包中的元素的个数
     *
     * @return 包的大小
     */
    int size();

    /**
     * 是否包含某个元素
     *
     * @param elem 是否要包含的元素!
     * @return true说明包含某个元素, false不包含某个元素
     */
    boolean contains(T elem);

    /**
     * 清空包中的所有元素
     */
    void clear();


    /**
     * 删除包中指定位置的元素
     * @param index 需要被移除元素的索引
     * @return 被移除的元素
     */
    T remove(int index);

    /**
     * 如果存在指定的元素,就移除,如果返回true就说明移除成功,如果返回false表示没有移除成功,可以不存在这个元素
     * @param elem 指定要移除的元素
     * @return 被移的元素
     */
    boolean remove(T elem);

    /**
     * 获取指定位置的元素
     * @param index 指定的位置
     * @return 指定位置对应的元素
     */
    T get(int index);


    /**
     * 返回包中指定元素第一次出现的索引,如果包中不存在指定的索引,返回-1.
     * @param elem 指定的元素
     * @return 指定元素的索引
     */
    int indexOf(T elem);


    /**
     * 返回包中指定元素最后一次出现的索引,如果包中不存在指定的索引,返回-1.
     * @param elem 指定的元素
     * @return 指定元素的索引
     */
    int lastIndexOf(T elem);
}
